#include "includes.h"
#include "variable.h"
#include "task.h"

#define START_TASK_PRIO 10
#define START_STK_SIZE  128
OS_STK START_TASK_STK[START_STK_SIZE];
void   start_task(void *pdata);

int main(void)
{
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    OSInit();
    OSTaskCreate(start_task, (void *)0, (OS_STK *)&START_TASK_STK[START_STK_SIZE - 1], START_TASK_PRIO);
    OSStart();
}

void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr = 0;
    pdata            = pdata;
    OSStatInit();
    OS_ENTER_CRITICAL();
    OSTaskCreate(func_task, (void *)0, (OS_STK *)&FUNC_TASK_STK[FUNC_STK_SIZE - 1], FUNC_TASK_PRIO);
    OSTaskCreate(uasrt_task, (void *)0, (OS_STK *)&USART_TASK_STK[USART_STK_SIZE - 1], USART_TASK_PRIO);
    OSTaskCreate(lcd_task, (void *)0, (OS_STK *)&LCD_TASK_STK[LCD_STK_SIZE - 1], LCD_TASK_PRIO);
    OSTaskCreate(adc_task, (void *)0, (OS_STK *)&adc_task_STK[ADC_STK_SIZE - 1], ADC_TASK_PRIO);
    OSTaskCreate(mode_ctl_task, (void *)0, (OS_STK *)&MODE_CTL_TASK_STK[MODE_CTL_STK_SIZE - 1], MODE_CTL_TASK_PRIO);
    OSTaskSuspend(START_TASK_PRIO);
    OS_EXIT_CRITICAL();
}
